{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4366e1bd-8be0-436f-ba82-55d09b049963",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 步骤\n",
    "# 1.读取NPZ文件\n",
    "# 2.onehot 独热编码\n",
    "# 3.分为train和test数据\n",
    "# 4.搭建CNN模型\n",
    "# 5.训练模型\n",
    "# 6.保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "049b570c-a09e-4a9b-9fff-bdd812295cb4",
   "metadata": {},
   "outputs": [],
   "source": [
    "## 1.读取NPZ文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1df10642-1fc6-48d7-9a46-72b1e68a05b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "edee3c07-1dd3-49c9-81c4-fbf795316eca",
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.load('./data/imageData.npz')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7fec28da-81d9-4453-b21a-4fa5b8b3e427",
   "metadata": {},
   "outputs": [],
   "source": [
    "img_list = arr['arr_0']\n",
    "label_list =arr['arr_1']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8db3df74-d44a-404e-bcb9-702f11588f00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((5320, 100, 100, 3), (5320,))"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "img_list.shape,label_list.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff46ad27-63f2-4492-bb12-8934881e9945",
   "metadata": {},
   "source": [
    "## 2.onehot 独热编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3769249f-9b91-4250-9f17-67c0c0995d51",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['1.yes', '2.no', '3.nose'], dtype='<U6')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.unique(label_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cbfff54f-b02d-469e-8dc4-7282be6e63a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import OneHotEncoder\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b2965ab6-26d5-4ac9-91b6-b8707f197e7b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 实例化\n",
    "onehot = OneHotEncoder()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "cc2983b6-5777-463c-9a3c-23adedd41d66",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 编码\n",
    "y_onehot =onehot.fit_transform(label_list.reshape(-1,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3e964de2-f0b2-464e-a72b-243a0a1aef72",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_onehot_arr = y_onehot.toarray()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f0e3974c-7e1a-4518-96bc-46a71793a7c1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [1., 0., 0.],\n",
       "       ...,\n",
       "       [0., 0., 1.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 0., 1.]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_onehot_arr"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a152a5c1-c329-4d4f-91e7-14f05d2dbaa0",
   "metadata": {},
   "source": [
    "## 3.分为train和test数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "bef69e15-0dec-4ac7-a699-7e21eb7ae451",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0b5a62ed-a92a-46a3-9c47-88c764f21276",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train,x_test,y_train,y_test = train_test_split(img_list,y_onehot_arr,test_size=0.2,random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f7eb3e66-1aef-4c89-b08a-f70788780d6d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((4256, 100, 100, 3), (1064, 100, 100, 3), (4256, 3), (1064, 3))"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train.shape,x_test.shape,y_train.shape,y_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c823396-16c1-4946-8d4e-922b1f351cfa",
   "metadata": {},
   "source": [
    "## 4.搭建CNN模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "cfbfe43a-3963-438f-8e5b-2a822027cc58",
   "metadata": {},
   "outputs": [],
   "source": [
    "# pip install --upgrade tensorflow\n",
    "# pip install tensorflow-gpu==版本号  # GPU"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "9dcfbacd-7eb8-466c-b339-ce8725df1f15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow.keras import layers\n",
    "from tensorflow.keras import Sequential"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "0951823d-e22b-44c4-a8be-3042f3d2776b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 搭建模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7746310b-5770-4203-a35f-1e54263fad34",
   "metadata": {},
   "source": [
    "![](./cnn.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "553fb02b-e7ec-4086-b985-8c57bddb550f",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = Sequential([\n",
    "    layers.Conv2D(16,3,padding='same',input_shape=(100,100,3),activation='relu'),\n",
    "    layers.MaxPool2D(),\n",
    "    layers.Conv2D(32,3,padding='same',activation='relu'),\n",
    "    layers.MaxPool2D(),\n",
    "    layers.Conv2D(64,3,padding='same',activation='relu'),\n",
    "    layers.MaxPool2D(),\n",
    "    layers.Flatten(),\n",
    "    layers.Dense(166,activation='relu'),\n",
    "    layers.Dense(22,activation='relu'),\n",
    "    layers.Dense(3,activation='sigmoid')\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "273b64be-fc07-4e17-ba3d-d03ebc195ccf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 编译模型\n",
    "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),loss=tf.keras.losses.categorical_crossentropy,metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "0ed94637-ba79-4a16-a87b-b71dc0af06bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d (Conv2D)              (None, 100, 100, 16)      448       \n",
      "_________________________________________________________________\n",
      "max_pooling2d (MaxPooling2D) (None, 50, 50, 16)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_1 (Conv2D)            (None, 50, 50, 32)        4640      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_1 (MaxPooling2 (None, 25, 25, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_2 (Conv2D)            (None, 25, 25, 64)        18496     \n",
      "_________________________________________________________________\n",
      "max_pooling2d_2 (MaxPooling2 (None, 12, 12, 64)        0         \n",
      "_________________________________________________________________\n",
      "flatten (Flatten)            (None, 9216)              0         \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 166)               1530022   \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 22)                3674      \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 3)                 69        \n",
      "=================================================================\n",
      "Total params: 1,557,349\n",
      "Trainable params: 1,557,349\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 预览模型\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e8e4aad-4567-4b44-a7ec-720c10f3364e",
   "metadata": {},
   "source": [
    "## 5.训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "f66045ec-fd08-4da9-a792-e8f19ef3fea9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/15\n",
      "142/142 [==============================] - 4s 28ms/step - loss: 0.2084 - accuracy: 0.9328 - val_loss: 0.1120 - val_accuracy: 0.9633\n",
      "Epoch 2/15\n",
      "142/142 [==============================] - 4s 29ms/step - loss: 0.1136 - accuracy: 0.9645 - val_loss: 0.1333 - val_accuracy: 0.9605\n",
      "Epoch 3/15\n",
      "142/142 [==============================] - 4s 30ms/step - loss: 0.0831 - accuracy: 0.9734 - val_loss: 0.0672 - val_accuracy: 0.9756\n",
      "Epoch 4/15\n",
      "142/142 [==============================] - 4s 29ms/step - loss: 0.0608 - accuracy: 0.9791 - val_loss: 0.0577 - val_accuracy: 0.9859\n",
      "Epoch 5/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0474 - accuracy: 0.9850 - val_loss: 0.1064 - val_accuracy: 0.9737\n",
      "Epoch 6/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0485 - accuracy: 0.9821 - val_loss: 0.1245 - val_accuracy: 0.9699\n",
      "Epoch 7/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0300 - accuracy: 0.9922 - val_loss: 0.0745 - val_accuracy: 0.9803\n",
      "Epoch 8/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0281 - accuracy: 0.9892 - val_loss: 0.0916 - val_accuracy: 0.9803\n",
      "Epoch 9/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0189 - accuracy: 0.9944 - val_loss: 0.0874 - val_accuracy: 0.9821\n",
      "Epoch 10/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0086 - accuracy: 0.9969 - val_loss: 0.0893 - val_accuracy: 0.9850\n",
      "Epoch 11/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0071 - accuracy: 0.9969 - val_loss: 0.0698 - val_accuracy: 0.9840\n",
      "Epoch 12/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0340 - accuracy: 0.9885 - val_loss: 0.0833 - val_accuracy: 0.9774\n",
      "Epoch 13/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0185 - accuracy: 0.9937 - val_loss: 0.0588 - val_accuracy: 0.9821\n",
      "Epoch 14/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0052 - accuracy: 0.9981 - val_loss: 0.0940 - val_accuracy: 0.9831\n",
      "Epoch 15/15\n",
      "142/142 [==============================] - 4s 31ms/step - loss: 0.0022 - accuracy: 0.9988 - val_loss: 0.0805 - val_accuracy: 0.9831\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(x=x_train,y=y_train,validation_data=(x_test,y_test),batch_size=30,epochs=15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "aa6917ca-24a1-4467-9946-f630a10664de",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 查看训练效果\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "d7862087-4d13-4815-89bd-dd27a03d44f5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "487ca255-a28c-417b-bb13-32afca6cfd59",
   "metadata": {},
   "outputs": [],
   "source": [
    "history_pd = pd.DataFrame(history.history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "b2bf613f-abcc-43e0-84f1-ce595fb5b8e7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>loss</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>val_loss</th>\n",
       "      <th>val_accuracy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.208449</td>\n",
       "      <td>0.932801</td>\n",
       "      <td>0.111963</td>\n",
       "      <td>0.963346</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.113573</td>\n",
       "      <td>0.964521</td>\n",
       "      <td>0.133309</td>\n",
       "      <td>0.960526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.083130</td>\n",
       "      <td>0.973449</td>\n",
       "      <td>0.067184</td>\n",
       "      <td>0.975564</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.060772</td>\n",
       "      <td>0.979088</td>\n",
       "      <td>0.057737</td>\n",
       "      <td>0.985902</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.047358</td>\n",
       "      <td>0.984962</td>\n",
       "      <td>0.106374</td>\n",
       "      <td>0.973684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.048464</td>\n",
       "      <td>0.982143</td>\n",
       "      <td>0.124503</td>\n",
       "      <td>0.969925</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.030027</td>\n",
       "      <td>0.992246</td>\n",
       "      <td>0.074485</td>\n",
       "      <td>0.980263</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.028132</td>\n",
       "      <td>0.989192</td>\n",
       "      <td>0.091613</td>\n",
       "      <td>0.980263</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.018942</td>\n",
       "      <td>0.994361</td>\n",
       "      <td>0.087360</td>\n",
       "      <td>0.982143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.008612</td>\n",
       "      <td>0.996946</td>\n",
       "      <td>0.089328</td>\n",
       "      <td>0.984962</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.007086</td>\n",
       "      <td>0.996946</td>\n",
       "      <td>0.069840</td>\n",
       "      <td>0.984023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.033996</td>\n",
       "      <td>0.988487</td>\n",
       "      <td>0.083327</td>\n",
       "      <td>0.977444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.018451</td>\n",
       "      <td>0.993656</td>\n",
       "      <td>0.058819</td>\n",
       "      <td>0.982143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.005190</td>\n",
       "      <td>0.998120</td>\n",
       "      <td>0.094030</td>\n",
       "      <td>0.983083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.002152</td>\n",
       "      <td>0.998825</td>\n",
       "      <td>0.080528</td>\n",
       "      <td>0.983083</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        loss  accuracy  val_loss  val_accuracy\n",
       "0   0.208449  0.932801  0.111963      0.963346\n",
       "1   0.113573  0.964521  0.133309      0.960526\n",
       "2   0.083130  0.973449  0.067184      0.975564\n",
       "3   0.060772  0.979088  0.057737      0.985902\n",
       "4   0.047358  0.984962  0.106374      0.973684\n",
       "5   0.048464  0.982143  0.124503      0.969925\n",
       "6   0.030027  0.992246  0.074485      0.980263\n",
       "7   0.028132  0.989192  0.091613      0.980263\n",
       "8   0.018942  0.994361  0.087360      0.982143\n",
       "9   0.008612  0.996946  0.089328      0.984962\n",
       "10  0.007086  0.996946  0.069840      0.984023\n",
       "11  0.033996  0.988487  0.083327      0.977444\n",
       "12  0.018451  0.993656  0.058819      0.982143\n",
       "13  0.005190  0.998120  0.094030      0.983083\n",
       "14  0.002152  0.998825  0.080528      0.983083"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history_pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "9b5521e2-0320-449d-a9ff-083372c0c9eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看损失\n",
    "plt.plot(history_pd['loss'])\n",
    "plt.plot(history_pd['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.xlabel('epoch')\n",
    "plt.ylabel('loss')\n",
    "plt.legend(['train set','test set'],loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "30768bb3-ecc7-4eef-8333-d7a986b70bf6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看准确率\n",
    "plt.plot(history_pd['accuracy'])\n",
    "plt.plot(history_pd['val_accuracy'])\n",
    "plt.title('Model accuracy')\n",
    "plt.xlabel('epoch')\n",
    "plt.ylabel('loss')\n",
    "plt.legend(['train set','test set'],loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cce3fb13-de9e-4638-9eff-4eda886e971e",
   "metadata": {},
   "source": [
    "## 6.保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "5b7c12a3-a075-4627-8f97-ba558b0d9082",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\Administrator\\miniconda3\\envs\\tf_gpu\\lib\\site-packages\\tensorflow\\python\\training\\tracking\\tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n",
      "WARNING:tensorflow:From C:\\Users\\Administrator\\miniconda3\\envs\\tf_gpu\\lib\\site-packages\\tensorflow\\python\\training\\tracking\\tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n",
      "INFO:tensorflow:Assets written to: ./data/face_mask_model\\assets\n"
     ]
    }
   ],
   "source": [
    "model.save('./data/face_mask_model')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
